import { ExtractionTask } from '../types/index.js';
import { logger } from '../utils/logger.js';
import { env } from '../utils/env.js';
import { TranslationProcessController } from '../controllers/TranslationProcessController.js';

async function main() {
  try {
    // 创建任务配置
    const task: ExtractionTask = {
      taskId: 'test-task-001',
      projectId: 'forexdana',
      version: '1.0.0',
      languages: ['en', 'zh-CN'],
      sourcePaths: ['app/src/main/java/com/indone/online'],
      excludePatterns: ['**/*.test.*', '**/test/**'],
      outputFormat: 'json',
      callbackUrl: 'http://localhost:3000/callback',
      priority: 1,
      timeout: env.task.timeout,
      gitConfig: {
        repository: env.gitlab.repository,
        branch: env.gitlab.branch,
        username: env.gitlab.username,
        token: env.gitlab.token,
        clonePath: `${env.storage.repositoryPath}/forexdana`,
        updateStrategy: 'clone',
      },
      translationConfig: {
        scan: {
          defaultLocale: 'en',
          maxDepth: 8,
        },
        android: {
          rootDir: 'app/src/main/java/com/indone/online',
          resourcePaths: [
            {
              language: 'en', // 语言代码
              sourcePath: 'repositories/forexdana/app/src/main/res/values/strings.xml', // 源码路径
              excludePatterns: [], // 排除模式
            },
          ],
          apiUrl: 'https://api.dana668.com/language-v1',
          excludeDirs: [],
        },
      },
      parserConfig: [
        {
          type: 'android', // 解析器类型，指定为Android平台
          parser: 'android-parser', // 使用的解析器名称
          options: {
            includeComments: true, // 是否在提取过程中包含注释信息
            extractContext: true, // 是否提取翻译键的上下文信息
            maxDepth: 8, // 解析的最大嵌套深度，防止无限递归
            ignorePatterns: ['**/*.test.*'], // 忽略测试相关文件的glob模式
            keyPatterns: ['**/*.java', '**/*.kt', '**/*.xml'], // 从哪些文件中提取翻译键的glob模式
            valuePatterns: ['**/values/*.xml'], // 从哪些文件中提取翻译值的glob模式
            customRules: [], // 自定义解析规则，当前为空
          },
        },
      ],
      analysisConfig: {
        keyAnalysis: {
          frequencyThreshold: 1,
          contextAnalysis: true,
          moduleAnalysis: true,
          tagAnalysis: true,
        },
        coverageAnalysis: {
          languageCoverage: true,
          moduleCoverage: true,
          scenarioCoverage: true,
        },
        qualityAnalysis: {
          duplicateCheck: true,
          namingCheck: true,
          contextCheck: true,
        },
        // 为分类器添加规则配置
        classifierRules: {
          infrastructureDirs: [
            'adapter',
            'app',
            'base',
            'dao',
            'entity',
            'http',
            'mvp',
            'receiver',
            'socket',
            'utils',
            'widget',
          ],
        },
      },
      reportConfig: {
        format: 'json',
        sections: ['coverage', 'usage', 'quality'],
        charts: ['coverage', 'usage'],
        exportPath: env.storage.reportPath,
        template: 'default',
      },
      notificationConfig: {
        type: 'webhook',
        recipients: ['http://localhost:3000/notify'],
        events: ['task.completed', 'task.failed'],
        template: 'default',
      },
    };

    // 初始化翻译处理控制器
    const processController = new TranslationProcessController(task);
    logger.info('翻译处理控制器初始化完成');

    // 执行完整处理流程
    const result = await processController.processTranslations();

    // 打印结果路径
    logger.info('处理完成，输出文件路径：');
    logger.info(`- 原始提取结果: ${result.extractionPath}`);
    logger.info(`- 分类结果: ${result.classificationPath}`);
    logger.info(`- 模块树: ${result.moduleTreePath}`);
    logger.info(`- 模块报告: ${result.moduleReportPath}`);

    logger.info('开发环境-测试完成');
  } catch (error) {
    if (error instanceof Error) {
      logger.error('开发环境-测试失败:', { error: error.message });
    } else {
      logger.error('开发环境-测试失败:', { error: String(error) });
    }
    process.exit(1);
  }
}

main();
